﻿using University.Workshop.Business;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using University.Workshop.Model;
using System.Windows.Forms;

namespace University.Workshop.Tests
{


    /// <summary>
    ///Se trata de una clase de prueba para RoomStuffManagerTest y se pretende que
    ///contenga todas las pruebas unitarias RoomStuffManagerTest.
    ///</summary>
    [TestClass()]
    public class RoomStuffManagerTest
    {


        private TestContext testContextInstance;

        /// <summary>
        ///Obtiene o establece el contexto de la prueba que proporciona
        ///la información y funcionalidad para la ejecución de pruebas actual.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Atributos de prueba adicionales
        // 
        //Puede utilizar los siguientes atributos adicionales mientras escribe sus pruebas:
        //
        //Use ClassInitialize para ejecutar código antes de ejecutar la primera prueba en la clase 
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Use ClassCleanup para ejecutar código después de haber ejecutado todas las pruebas en una clase
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Use TestInitialize para ejecutar código antes de ejecutar cada prueba
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Use TestCleanup para ejecutar código después de que se hayan ejecutado todas las pruebas
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Una prueba de CreateNewRoom
        ///</summary>
        [TestMethod()]
        public void CreateNewRoomTest()
        {
            Random rand = new Random(DateTime.Now.Millisecond);
            Room room = new Room("a" + rand.Next(154256).ToString(), 1); // TODO: Inicializar en un valor adecuado
            RoomStuffManager.CreateNewRoom(room);
            bool expected = false; // TODO: Inicializar en un valor adecuado
            bool actual;
            actual = RoomStuffManager.CreateNewRoom(room);
            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        ///Una prueba de CreateNewRoom
        ///</summary>
        [TestMethod()]
        public void CreateNewRoomTestTrue()
        {
            Random rand = new Random(DateTime.Now.Millisecond);
            Room room = new Room("a" + rand.Next(154256).ToString(), 1); // TODO: Inicializar en un valor adecuado
            bool expected = true; // TODO: Inicializar en un valor adecuado
            bool actual;
            actual = RoomStuffManager.CreateNewRoom(room);
            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        ///Una prueba de GetByName Que devuelve una excepcion
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetByNameTest()
        {
            string name = string.Empty; // TODO: Inicializar en un valor adecuado
            RoomStuffManager.GetByName(name);
        }


        /// <summary>
        ///Una prueba de GetByName
        ///</summary>
        [TestMethod()]
        public void GetByNameTest2()
        {

            string name = "Simple"; // TODO: Inicializar en un valor adecuado
            int expected = 1; // TODO: Inicializar en un valor adecuado
            int actual;
            actual = RoomStuffManager.GetByName(name);
            Assert.AreEqual(expected, actual);
        }

        /// <summary>
        ///Una prueba de GetIdRoomByName
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetIdRoomByNameTest()
        {
            string name = string.Empty; // TODO: Inicializar en un valor adecuado
            RoomStuffManager.GetIdRoomByName(name);
        }
        /// <summary>
        ///Una prueba de GetIdRoomByName
        ///</summary>
        [TestMethod()]
        public void GetIdRoomByNameTest2()
        {
            string name = "a20"; // TODO: Inicializar en un valor adecuado
            int expected = 0; // TODO: Inicializar en un valor adecuado
            int actual;
            actual = RoomStuffManager.GetIdRoomByName(name);
            Assert.AreNotEqual(expected, actual);
        }


        /// <summary>
        ///Una prueba de GetAllRooms
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetAllRoomsTestWhenDataGridIsNullReturnsAnException()
        {
            DataGridView rooms = null; // TODO: Inicializar en un valor adecuado
            RoomStuffManager.GetAllRooms(rooms);
        }

        /// <summary>
        ///Una prueba de GetAllRooms
        ///</summary>
        [TestMethod()]
        public void GetAllRoomsTest()
        {
            DataGridView rooms = new DataGridView(); // TODO: Inicializar en un valor adecuado
            DataGridViewTextBoxColumn idRoom = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn roomName = new DataGridViewTextBoxColumn();
            DataGridViewTextBoxColumn type = new DataGridViewTextBoxColumn();
            idRoom.Name = "idRoom";
            roomName.Name = "RoomName";
            type.Name = "Type";
            rooms.Columns.AddRange(new DataGridViewColumn[] { idRoom, roomName, type });
            RoomStuffManager.GetAllRooms(rooms);
            Assert.IsNotNull(rooms);
        }

        /// <summary>
        ///Una prueba de DrawColumnsHeader
        ///</summary>
        [TestMethod()]
        public void DrawColumnsHeaderTest()
        {
            DateTime dateTime = DateTime.Today; // TODO: Inicializar en un valor adecuado
            DataGridView roomsDataGrid = new DataGridView(); // TODO: Inicializar en un valor adecuado
            RoomStuffManager.DrawColumnsHeader(dateTime, roomsDataGrid);
            Assert.IsNotNull(roomsDataGrid);
        }

        /// <summary>
        ///Una prueba de GetAllBookedAnTokenRoomsForAWeek
        ///</summary>
        [TestMethod()]
        public void GetAllBookedAnTokenRoomsForAWeekTest()
        {
            DateTime dateTime = DateTime.Today; // TODO: Inicializar en un valor adecuado
            DataGridView roomsDataGrid = new DataGridView(); // TODO: Inicializar en un valor adecuado
            RoomStuffManager.GetAllBookedAndTokenRoomsForAWeek(dateTime, roomsDataGrid, 0);
            Assert.IsNotNull(roomsDataGrid);
        }

        /// <summary>
        ///Una prueba de DrawColumnsHeader
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void DrawColumnsHeaderTestWhenRoomsDataGridIsNull()
        {
            DateTime dateTime = new DateTime(); // TODO: Inicializar en un valor adecuado
            DataGridView roomsDataGrid = null; // TODO: Inicializar en un valor adecuado
            RoomStuffManager.DrawColumnsHeader(dateTime, roomsDataGrid);
        }

        /// <summary>
        ///Una prueba de DrawColumnsHeaderForADay
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void DrawColumnsHeaderForADayTest()
        {
            DateTime dateTime = new DateTime(); // TODO: Inicializar en un valor adecuado
            DataGridView roomsDataGrid = null; // TODO: Inicializar en un valor adecuado
            RoomStuffManager.DrawColumnsHeaderForADay(dateTime, roomsDataGrid);
        }

        /// <summary>
        ///Una prueba de GetRoomNameByRoomId
        ///</summary>
        [TestMethod()]
        [ExpectedException(typeof(ArgumentException))]
        public void GetRoomNameByRoomIdTestThrowAExceptionWhenRoomIdIsNotValidFormat()
        {
            string roomId = "@##$#$"; // TODO: Inicializar en un valor adecuado
            string actual;
            actual = RoomStuffManager.GetRoomNameByRoomId(roomId);
        }
    }
}
